//package com.kitbox.hl.meshow.common.utils.xml;
//import java.awt.print.Book;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.InputStream;
//import java.util.Iterator;
//import java.util.List;
//
//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//import javax.xml.parsers.SAXParserFactory;
//
//import com.sun.org.apache.xml.internal.resolver.readers.SAXParserHandler;
//import org.dom4j.io.SAXReader;
//import org.jdom.input.SAXBuilder;
//import org.w3c.dom.NamedNodeMap;
//import org.w3c.dom.Node;
//import org.w3c.dom.NodeList;
//import org.dom4j.Attribute;
//import org.dom4j.Document;
//
//import org.dom4j.Element;
//
//
///**
// * @Auther: honglei
// * @Date: 2019/9/5 09:52
// * @Description:
// */
//public class ParserTest {
//    public void Dom4jToXML() throws Exception {
//        // 解析books.xml文件
//        // 创建SAXReader的对象reader
//        SAXReader reader = new SAXReader();
//        // reader对象的read方法加载books.xml文件,获取document对象
//        Document document = (Document) reader.read(new File("books.xml"));
//        // 通过document对象获取根节点bookstore
//        Element bookStore = document.getRootElement();
//        // 遍历迭代器，获取根节点中的信息(书籍)
//        Iterator it = bookStore.elementIterator();
//        while (it.hasNext()) {
//            //System.out.println("----------开始遍历某本书------------");
//            Element book = (Element) it.next();
//            // 获取book的属性名和属性值
//            List<Attribute> bookAttrs = book.attributes();
//            for (Attribute attr : bookAttrs) {
//                //System.out.println("节点名：" + attr.getName() + "----节点值：" + attr.getValue());
//            }
//            Iterator itt = book.elementIterator();
//            while (itt.hasNext()) {
//                Element bookchild = (Element) itt.next();
//                // 获取book子节点的属性名和属性值
//                //System.out.println("节点名：" + bookchild.getName() + "----节点值：" + bookchild.getName());
//            }
//
//            //System.out.println("----------结束遍历某本书------------");
//        }
//    }
//
//    @SuppressWarnings("unused")
//    public void DomToXML() throws Exception {
//        // 创建一个DocumentBuilderFactory的对象
//        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//        // 创建一个DocumentBuilder对象
//        DocumentBuilder db = dbf.newDocumentBuilder();
//        // 通过DocumentBuilder对象的parse(String fileName)方法解析xml文件
//        org.w3c.dom.Document document = db.parse("books.xml");
//        // 获取所有book节点的集合
//        NodeList bookList = ((org.w3c.dom.Document) document).getElementsByTagName("book");
//        // 通过nodelist.getLength()方法来获取bookList的节点个数
//        //System.out.println(bookList.getLength());
//        // 遍历每一个book节点
//        for (int i = 0; i < bookList.getLength(); i++) {
//            //System.out.println("---------现在开始遍历第" + (i + 1) + "本书的内容---------------");
//            // 通过 item(i)方法获取一个book节点，notelist的索引值从0开始
//            Node book = bookList.item(i);
//            // 获取book节点的所有属性集合
//            NamedNodeMap attrs = book.getAttributes();
//            //System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength() + "个属性");
//            // 遍历book的属性
//            for (int j = 0; j < attrs.getLength(); j++) {
//                // 通过item(index)方法获取book节点的某个属性
//                Node attr = attrs.item(j);
//                // 获取属性名
//                //System.out.print("属性名" + attr.getNodeName());
//                // 获取属性值
//                //System.out.println("-----属性值" + attr.getNodeValue());
//            }
//            // 解析book节点的子节点
//            NodeList childNodes = book.getChildNodes();
//            // 遍历childNodes获取每个节点的节点名和节点值
//            //System.out.println("第" + (i + 1) + "本书共有" + childNodes.getLength() + "字节点");
//            for (int k = 0; k < childNodes.getLength(); k++) {
//                // 区分出text类型的node以及element类型的node
//                if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
//                    // 获取了element类型节点的节点名
//                    //System.out.print("第" + (k + 1) + "个节点的节点名为：" + childNodes.item(k).getNodeName());
//                    // 获取了element类型节点的节点值
//                    // System.out.println("----节点值为："+childNodes.item(k).getFirstChild().getNodeValue());
//                    //System.out.println("----节点值为：" + childNodes.item(k).getTextContent());
//                }
//            }
//            //System.out.println("------------------结束遍历-------------------");
//        }
//    }
//
//    public void SAXToXML() throws Exception {
//        // 获取一个SAXParserFactory的实例
//        javax.xml.parsers.SAXParserFactory factory = SAXParserFactory.newInstance();
//        // 通过factory获取SAXParser实例
//        javax.xml.parsers.SAXParser parser = factory.newSAXParser();
//        // 创建SAXParserHandler对象
//        SAXParserHandler handler = new SAXParserHandler();
//        parser.parse("books.xml", handler);
//    }
//
//    @SuppressWarnings("unchecked")
//    public void JDomToXML() throws Exception {
//        // 进行对books.xml文件的JDOM解析
//        // 准备工作
//        // 1.创建一个SAXBuilder的对象
//        SAXBuilder saxBuilder = new SAXBuilder();
//        // 2.创建一个输入流，将xml文件加载到输入流中
//        InputStream in = new FileInputStream("books.xml");
//        // InputStreamReader isr= new InputStreamReader(in,"UTF-8");
//        // 3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
//        org.jdom.Document document = saxBuilder.build(in);
//        // 4.通过document对象获取xml文件的根节点
//        org.jdom.Element rootElement = document.getRootElement();
//        // 5.获取根节点下的子节点的List集合
//        List<org.jdom.Element> bookList = ((org.jdom.Element) rootElement).getChildren();
//        // 继续进行解析
//        for (org.jdom.Element book : bookList) {
//            // 创建一个book对象
//            Book bookEntity = new Book();
//            //System.out.println("------------开始解析第" + (bookList.indexOf(book) + 1) + "本书-----------");
//            // 开始解析book的属性
//            // 适用于我们不知道有多少属性
//            List<org.jdom.Attribute> attrList = book.getAttributes();
//            // 适用于我们知道子节点属性的名称直接获取其属性
//            // Book.getAttributeValue("id");
//            // 遍历attrList(针对于不知道book节点下属性的名称及数量)
//            for (org.jdom.Attribute attr : attrList) {
//                // 获取属性名
//                String attrName = attr.getName();
//                // 获取属性值
//                String attrValue = attr.getValue();
//                //System.out.println("属性名：" + attrName + "-----属性值：" + attrValue);
//                if (attrName.equals("id")) {
//                   // bookEntity.setId(attrValue);
//                }
//            }
//            // 对book节点的子节点的节点名和节点值的遍历
//            List<org.jdom.Element> bookChilds = book.getChildren();
//            for (org.jdom.Element child : bookChilds) {
//                //System.out.println("节点名：" + child.getName() + "---节点值：" + child.getValue());
//            }
//            //System.out.println("------------结束解析第" + (bookList.indexOf(book) + 1) + "本书-----------");
//        }
//    }
//
//    public void testPerformance() throws Exception {
//        System.out.println("性能测试");
//        //测试DOM的性能
//        long start = System.currentTimeMillis();
//        DomToXML();
//        System.out.println("DOM:"+(System.currentTimeMillis()-start));
//        //测试SAX的性能
//        start = System.currentTimeMillis();
//        SAXToXML();
//        System.out.println("SAX:"+(System.currentTimeMillis()-start));
//        //测试JDOM的性能
//        start = System.currentTimeMillis();
//        JDomToXML();
//        System.out.println("JDOM:"+(System.currentTimeMillis()-start));
//        //测试DOM4J的性能
//        start = System.currentTimeMillis();
//        Dom4jToXML();
//        System.out.println("DOM4J:"+(System.currentTimeMillis()-start));
//    }
//    public static void main(String[] args) {
//        ParserTest pt = new ParserTest();
//    }
//}
